Mám vlastní uživatelské ovládání a hledám návrháře některé jeho vlastnosti. Vlastnosti pocházejí ze struktury. Zde je aktuální kód Soukromý seznam foo jako Foo_structure Veřejná struktura Foo_structure Veřejné vlastnictví a jako celé číslo Veřejný majetek b Jako celé číslo Veřejný majetek c jako doplňky Koncová struktura Doplňky veřejné struktury Přesnost veřejného majetku jako celé číslo Světlo veřejného majetku jako řetězec Koncová struktura Veřejný majetek foo jako Foo_structure Dostat Vrátit fooList Konec Get Nastavit (hodnota ByVal jako Foo_structure) fooList = hodnota Konec sady Ukončit vlastnost Musím být schopen nastavit vlastnosti Foo_structure z panelu vlastností návrháře, jako je např. Zobrazeno na obrázku níže.
2021-01-28 08:20:37
Budete potřebovat TypeConverter, abyste sbalili foo do řetězce; a převést zpět z toho. Vnořený typ znamená, že musíte pro Extras napsat další. Pravděpodobně budete muset použít některé atributy ke zpracování vytrvalosti návrháře. Chcete-li začít, myslím, že musíte změnit alespoň Foo_structure na třídu, jinak neexistuje způsob, jak přidat kód do instance Extras (také žádný způsob, jak vytvořit instanci Foo). To by vás mělo začít (změnila některá jména): „Foo převedeno na třídu:Veřejná třída FooBar Foo veřejného majetku jako celé číslo Bar veřejného majetku jako celé číslo Veřejný majetek Ex jako doplňky Public Sub New (a1 jako celé číslo, b2 jako celé číslo) Foo = a1 Bar = b2 Ex = New Extras 'nechtějí NIC létat End Sub Konec třídy DefaultValue nedělá to, co si možná myslíte. Říká IDE, aby serializoval hodnotu vlastnosti, když se aktuální hodnota nerovná Default. DesignerSerializationVisibility říká společnosti VS, aby uložila hodnotu vlastnosti. Foo a Bar to oba potřebují. Ex / Extra se liší. NotifyParentProperty umožňuje, aby byl FooBar upozorněn, když se změnila hodnota Extra vlastnosti, takže je aktualizováno okno IDE, interní sada "DirtyFlag" atd .; DesignerSerializationVisibility.Content říká VS, že víme, že nemůžeme uložit Ex jako hodnotu, takže uložte obsah. Pak přijde FooItemConverter. To bude věc, která zobrazí požadovaný řetězec v okně Rekvizity A vytvoří položku Foo z tohoto řetězce: Třída přítele FooItemConverter Zdědí ExpandableObjectConverter 'říká IDE, jaké převody dokáže zpracovat: Funkce veřejného přepsání CanConvertTo (kontext jako ITypeDescriptorContext, destType As Type) Jako Boolean If destType = GetType (String) Then ' Ano, já mohu Návrat True Konec Pokud „Pravděpodobně musíte také říct ANO instančnímu deskriptoru Vrátit MyBase.CanConvertTo (kontext, destType) Ukončit funkci Poté se funkce ConvertTo používá k převodu foo na řetězec. Něco takového: Funkce veřejného přepsání ConvertTo (kontext jako ITypeDescriptorContext, kultura jako globalizace.CultureInfo, hodnota jako objekt, destType jako typ) jako objekt If destType = GetType (String) Then Dim f As FooBar = CType (hodnota, FooBar) Vrátit String.Format ("{0}, {1}, {2}", f.foo.ToString, f.bar.ToString, f.Ex.ToString) 'výstupy: X, Y, „kde Ex je to, co používáme v ExtraItemConverteru Konec, pokud Vrátit MyBase.ConvertTo (kontext, destType) Ukončit funkci Pokud ExtraItemConverter.ConvertTo použít formát "({0} / {1})", obsah ovládacího prvku se zobrazí jako: F, B, (P / L), kde F = Foo, B = pruh atd. Aby to fungovalo, potřebujete 4 postupy: CanConvertTo, ConvertTo, CanConvertFrom, ConvertFrom, všechny reagující na řetězec. Pravděpodobně budete moci pouze použít atribut pro vytrvalost. FooItemConverter.ConvertFrom bude muset vědět, jak z tohoto řetězce vytvořit objekt. Normálně se to děje takto: 'analyzujte řetězec, který jste vytvořili, a vytvořte Foo Dim els As String () = str.Split ("," c) Vrátit nový myFoo (Convert.ToInt32 (els (0)), Convert.ToInt32 (els (1))) Všimněte si, že třetí prvek je ignorován, protože to je ve skutečnosti pro zpracování ExtraItemConverter. Ten převaděč by byl velmi podobný. Nejprve se tedy budete muset rozhodnout, zda se budete držet struktury nebo použijete třídu (další pro třídu je, že 99,999% příkladů, které najdete, bude založeno na třídě). Tito lidé toho o TypeConverters vědí hodně. | Tvoje odpověď StackExchange.ifUsing ("editor", function () { StackExchange.using ("externalEditor", function () { StackExchange.using ("snippets", function () { StackExchange.snippets.init (); }); }); }, „code-snippets“); StackExchange.ready (funkce () { var channelOptions = { tagy: "" .split (""), id: "1" }; initTagRenderer ("". split (""), "" .split (""), channelOptions); StackExchange.using ("externalEditor", function () { // Po výstřižcích je nutné spustit editor, pokud jsou úryvky povoleny if (StackExchange.settings.snippets.snippetsEnabled) { StackExchange.using ("snippets", function () { createEditor (); }); } else { createEditor (); } }); funkce createEditor () { StackExchange.prepareEditor ({ useStacksEditor: false, heartbeatType: 'answer', autoActivateHeartbeat: false, convertImagesToLinks: true, noModals: true, showLowRepImageUploadWarning: true, reputationToPostImages: 10, bindNavPrevention: true, postfix: "", imageUploader: { brandingHtml: "Používá \ u003ca href = \" https: //imgur.com/ \ "\ u003e \ u003csvg class = \" svg-icon \ "width = \" 50 \ "height = \" 18 \ "viewBox = \ "0 0 50 18 \" fill = \ "none \" xmlns = \ "http: //www.w3.org/2000/svg \" \ u003e \ u003cpath d = \ "M46.1709 9.17788C46.1709 8.2645446,2665 7,94324 47,1084 7,58816C47.4091 7,46349 47,7169 7,36433 48,0099 7,26993C48,9099 6,97977 49,672 6,73443 49,672 5,93063C49,672 5,22043 48,9832 4,61182 48,1414 4,61182C47,4335 4,61182 46,7256 4,91628 4,91650 4,91650 4,416 164 4,45 43,1481 6,59048V11.9512C43.1481 13,2535 43,6264 13,8962 44,6595 13,8962C45,6924 13,8962 46,1709 13,2535 46,1709 11,9512V9.17788Z \ "/ \ u003e \ u003cpath d = \" M32.492 10,1419432,144,14,144,14,144,44 41,5985 12,6954 41,5985 10,1419 V6,59049C41,5985 5,28821 41,1394 4,6632 40,1061 4,66232C39,0732 4,66232 38,5948 5,2821 38,5948 6,59049V9,60062C38,5948 10,8521 38,2696 11,5455 37,0451 11,5455 11,4455 35,445 C32.9703 4,66232 32,492 5,28821 32,492 6,59049V10.1419Z \ "/ \ u003e \ u003cpath fill-rule = \" evenodd \ "clip-rule = \" evenodd \ "d = \" M25.6622 17.6335C27.8049 17.6335 29.3739 16.9402 3 0,2537 15,6379C30,8468 14,7755 30,9615 13,5579 30,9615 11,9512V6,59049C30.9615 5,28821 30,4833 4,66231 29,4502 4,66231C28,9913 4,66231 28,4555 4,94978 28,1109 5,50789C27,499 4,86533 26,735 21,6013 25,413 21,13 13,13 25,3754 13,913C26,5612 13,913 27,4607 13,4902 28,1109 12,6616C28.1109 12,7229 28,1161 12,7799 28,121 12,8346C28.1256 12,854 28,1301 12,9342 28,1301 12,983 C28.1301 14,4373 27,2502 15,2321 25,77 212,321 14,71 212,231 14,71 212,231 C21. 24,1317 9,27932Z \ "/ \ u003e \ u003cpath d = \" M16.8045 11.9512C16.8045 13.2535 17.2637 13.8962 18.2965 13.8962C19.3298 13.8962 19,8079 13,2535 19,8079 11,9512V8,12928C19,8079 5,82936 18,4879 4,62866 16,4027 4,62866C15,1594 4,62866 14,279 4,98375 13,3609 5,88013C12,653 5,05154 11,6581 4,62866 10,3573 4,62866C9,3433 6,62866 8,77 7,32 6,47 4,32 6,47 4,32 6,47 4,32 6,47 4,32 6,47 5,32 6,47 4,32 6,47 4,32 5.00066 5,28821 500066 6,59049V11,9512C5,00066 13,2535 5,47873 13,8962 6,51203 13,8962C7,54479 13,8962 8,0232 13,2535 8,0232 11,9512V8,90741C8,0232 7,58817 8,44431 6,91179 9,53458 6,91179C10,5104 8,1010 C13.4375 13,8962 13,9157 13,2535 13,9157 11,9512V8,90741C13,9157 7,58817 14,3365 6,91179 15,4269 6,91179C16.4027 6,91179 16,8045 7,58817 16,8045 8,94108V11,9512Z \ "/ \ u003e \ u003c3,3 \ 1,82471 4,66232C0,791758 4,66232 0,313354 5,28821 0,313354 6,59049V11,9512C0,313354 13,2535 0,791758 13,8962 1,82471 13,8962C2.85798 13,8962 3,31675 13,2535 3,31675 11,9512V6,59049Z \ "/ \ u003e \ u003cpath d = \ "M1.87209 0.400291C0.843612 0.400291 0 1,1159 0 1.98861C0 2,87869 0,822846 3,57676 1,87209 3,57676C2.90056 3,57676 3,7234 2,87869 3,7234 1,98861C3,7234 1,11591,001201 1,159 2,0000 \ "/ \ u003e \ u003c / svg \ u003e \ u003c / a \ u003e", contentPolicyHtml: „Uživatelské příspěvky licencovány pod \ u003ca href = \" https: //stackoverflow.com/help/licensing \ "\ u003ecc by-sa \ u003c / a \ u003e \ u003ca href = \" https://stackoverflow.com / legal / content-policy \ "\ u003e (obsahové zásady) \ u003c / a \ u003e", allowUrls: true }, onDemand: pravda, discardSelector: ".discard-answer" , okamžitěShowMarkdownHelp: true, enableTables: true, enableSnippets: true }); } }); Děkujeme, že jste přispěli odpovědí na Stack Overflow! Nezapomeňte na otázku odpovědět. Uveďte podrobnosti a sdílejte svůj výzkum! Ale vyhnout se ... Žádáme o pomoc, vysvětlení nebo reagujeme na jiné odpovědi. Vytváření prohlášení na základě názoru; podpořte je referencemi nebo osobní zkušeností. Další informace najdete v našich tipech na psaní skvělých odpovědí. Koncept uložen Koncept zahozen Zaregistrujte se nebo se přihlaste StackExchange.ready (funkce () { StackExchange.helpers.onClickDraftSave ('# login-link'); }); Zaregistrujte se pomocí Google Zaregistrujte se pomocí Facebooku Zaregistrujte se pomocí e-mailu a hesla Předložit Zveřejněte jako host název E-mailem Povinné, ale nikdy zobrazené StackExchange.ready ( funkce () { StackExchange.openid.initPostLogin ('. New-post-login', 'https% 3a% 2f% 2fstackoverflow.com% 2fquestions% 2f24241527% 2fvb-net-setting-properties-of-user-control% 23new-answer', ' page_page '); } ); Zveřejněte jako host název E-mailem Povinné, ale nikdy zobrazené Zveřejněte svou odpověď Vyřadit Kliknutím na „Odeslat odpověď“ vyjadřujete souhlas s našimi podmínkami služby, zásadami ochrany osobních údajů a zásadami používání souborů cookie Toto není odpověď, kterou hledáte? Přečtěte si další otázky týkající se značek vb.net nebo si položte vlastní otázku.